#include "imtDemoRole.h"
#include "imtSceneCamera.h"
#include "imtGameScene.h"
#include "imtActionExecuter.h"
#include "OgreResourceGroupManager.h"

namespace iMate
{

	//void MoveController::onStart()
	//{
	//	mParent->_notifyStart();

	//	SceneNode* node = mParent->mSceneEntity->getDummy();
	//	Vector3 Direction = mTargetPos - node->getPosition();
	//	mfLength = Direction.length()/mfSpeed;
	//	mfCurtime = 0.0f;
	//	Direction.normalise();

	//	//Vector3 src = node->getOrientation() * Vector3::UNIT_X;
	//	//if ((1.0f + src.dotProduct(Direction)) < 0.0001f) 
	//	//{
	//	//	node->yaw(Degree(180));
	//	//}
	//	//else
	//	//{
	//	//	Ogre::Quaternion quat = src.getRotationTo(Direction);
	//	//	node->rotate(quat);
	//	//} // else
	//	
	//	mbFinish = false;
	//}

	//void MoveController::onfinish()
	//{
	//	

	//	mbFinish = true;

	//	mParent->_notifyFinsh();
	//}

	//void MoveController::update(Ogre::Real timedelta)
	//{
	//	if( mbFinish )	return;

	//	SceneNode* node = mParent->mSceneEntity->getDummy();
	//	node->translate(timedelta * this->mfSpeed * Vector3::UNIT_X,Node::TS_LOCAL);
	//	
	//	mfCurtime += timedelta;
	//	if( mfCurtime >= mfLength )
	//	{
	//		onfinish();
	//	}
	//}
	//

	//void RotateController::onStart()
	//{
	//	mParent->_notifyStart();

	//	mTargetDir.normalise();
	//	SceneNode* node = mParent->mSceneEntity->getDummy();
	//	mLastOrient = node->getOrientation();
	//	Vector3 src = mLastOrient * Vector3::UNIT_X;
	//	Ogre::Quaternion quat;
	//	if ((1.0f + src.dotProduct(mTargetDir)) < 0.0001f) 
	//	{
	//		node->yaw(Degree(180));
	//	}
	//	else
	//	{
	//		quat = src.getRotationTo(mTargetDir);
	//		quat.normalise();
	//		mDirFactor = quat * (1.0f/mfSpeed);
	//		mfLength = mfSpeed;
	//		mbFinish = false;
	//		mTargetOrient = quat * mLastOrient;
	//		//node->rotate(quat);
	//	} // else
	//	
	//}

	//void RotateController::onfinish()
	//{
	//	mfCurtime = 0.0f;
	//	mfLength = 0.0f;
	//	mbFinish = true;

	//	mParent->_notifyFinsh();
	//}

	//void RotateController::update(Ogre::Real timedelta)
	//{
	//	if( mbFinish )	return;

	//	mfCurtime += timedelta;
	//	//SceneNode* node = mParent->mSceneEntity->getDummy();
	//	//Quaternion rotate = Quaternion::nlerp(mfCurtime,mLastOrient,mTargetOrient,true);
	//	//node->setOrientation(rotate);
	//	//node->rotate(mDirFactor*timedelta,Node::TS_PARENT);
	//	//node->yaw(Ogre::Radian(mDirFactor.getYaw()*timedelta));

	//	if( mfCurtime >= mfLength )
	//	{
	//		onfinish();
	//	}
	//	
	//}


DemoRole::~DemoRole( )
{
}



void DemoRole::load(GameScene* gs)
{
	assert(gs);
	mSceneEntity = gs->getSceneObject<SceneEntity>("ent1");
	assert(mSceneEntity);
	mActionCtrl = OGRE_NEW SkeletonAnimController();
	mActionCtrl->attachToEntity(static_cast<Entity*>(mSceneEntity->getDummy()->getAttachedObject(0)));

}

	void DemoRole::Act(const char*name,bool bloop,Real duration)
	{
		if( mActionCtrl )
			mActionCtrl->changeAnimation(name,bloop,duration);
	}


void DemoRole::MoveTo(Vector3& pos,Real speed)
{
	
	//if( mActionCtrl )
	//{
	//	Real time = mRotateCtrl.getLength();
	//	mActionCtrl->setAction("Idle",false);
	//	mActionCtrl->setPlayVel(mActionCtrl->getCurrentAction()->getLength()/time);
	//}

	
	
}
void DemoRole::update(Real deltatime)
{
	if( mActionCtrl )
		mActionCtrl->update(deltatime);
}
void DemoRole::unload()
{
	
	if( mActionCtrl )
	{
		delete mActionCtrl;
		mActionCtrl = NULL;
	}

	
}

void DemoRole::_notifyFinsh()
{
	
}

void DemoRole::_notifyStart()
{
}

void DemoRole::start()
{
	
}

}